/**
 * @brief 邻接矩阵，其中二维数组 w[u][v] 存储从点 u 到点 v 的边的权值
 * 分析时杂和空杂
 * 时间复杂度：O(n^2), 空间复杂度：O(n^2)
 */
#include <iostream>
using namespace std;
const int MAX = 100;
// w 为邻接矩阵，用来记录边权
int w[MAX][MAX];
// vis 数组用来判重, true: 已经访问过, false： 还未访问过
bool vis[MAX];
// n 为节点个数, m 代表边数
int n, m;
void dfs(int u) {
  vis[u] = true;
  for (int v = 1; v <= n; ++v) {
    if (w[u][v]) {
      cout << u << ", " << v << ", " << w[u][v] << endl;
      if (!vis[v])
        dfs(v);
    }
  }
}
int main() {
  cin >> n >> m;

  int u, v, k;
  for (int i = 1; i <= m; ++i) {
    cin >> u >> v >> k;
    w[u][v] = k;
    // w[v][u] = k;
  }

  // 深搜从 1 开始
  dfs(1);

  return 0;
}
